home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / hack / 2_3 / wield.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-20  |  3.4 KB  |  134 lines

  1. /*    SCCS Id: @(#)wield.c    2.1    87/11/09
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3.  
  4. #include    "hack.h"
  5. extern struct obj zeroobj;
  6. extern char *hcolor();
  7. #ifdef KAA
  8. extern boolean unweapon;
  9. #endif
  10.  
  11. setuwep(obj) register struct obj *obj; {
  12.     setworn(obj, W_WEP);
  13. }
  14.  
  15. dowield()
  16. {
  17.     register struct obj *wep;
  18.     register int res = 0;
  19.  
  20.     multi = 0;
  21. #ifdef KAA
  22.     if (cantwield(u.usym)) {
  23.         pline("Don't be ridiculous!");
  24.         return(0);
  25.     }
  26. #endif
  27.     if(!(wep = getobj("#-)", "wield"))) /* nothing */;
  28.     else if(wep == &zeroobj) {
  29.       if(uwep == 0) {
  30.         pline("You are already empty handed.");
  31.       } else if (welded(uwep))
  32.         pline("The %s welded to your hand!",aobjnam(uwep,"are"));
  33.           else  {
  34.             setuwep((struct obj *) 0);
  35.             res++;
  36.             pline("You are empty handed.");
  37.           }
  38.     } else if(uwep == wep)
  39.         pline("You are already wielding that!");
  40.     else if(welded(uwep))
  41.         pline("The %s welded to your hand!",
  42.             aobjnam(uwep, "are"));
  43.     /* Prevent wielding a cockatrice in pack when not wearing gloves KAA*/
  44.     else if (!uarmg && wep->otyp == DEAD_COCKATRICE) {
  45.         pline("You wield the dead cockatrice in your bare hands.");
  46.         pline("You turn to stone ...");
  47.         killer="dead cockatrice";
  48.         done("died");
  49.     } else if(uarms && wep->otyp == TWO_HANDED_SWORD)
  50.     pline("You cannot wield a two-handed sword and wear a shield.");
  51.     else if(wep->owornmask & (W_ARMOR | W_RING))
  52.         pline("You cannot wield that!");
  53.     else {
  54.         setuwep(wep);
  55.         res++;
  56.         if(welded(uwep))
  57.             pline("The %s %s to your hand!",
  58.             aobjnam(uwep, "weld"),
  59.             (uwep->quan == 1) ? "itself" : "themselves"); /* a3 */
  60.         else prinv(uwep);
  61.     }
  62. #ifdef KAA
  63.     if(res && uwep)
  64.         unweapon = (uwep->otyp >= BOW || uwep->otyp <= BOOMERANG) ? 
  65.         TRUE : FALSE;
  66. #endif
  67.     return(res);
  68. }
  69.  
  70. corrode_weapon(){
  71.     if(!uwep || uwep->olet != WEAPON_SYM) return;    /* %% */
  72.     if(uwep->rustfree)
  73.         pline("Your %s not affected.", aobjnam(uwep, "are"));
  74.     else if (uwep->spe > -6) {
  75.         pline("Your %s!", aobjnam(uwep, "corrode"));
  76.         uwep->spe--;
  77.     } else    pline("Your %s quite rusted now.", aobjnam(uwep, "look"));
  78. }
  79.  
  80. chwepon(otmp,amount)
  81. register struct obj *otmp;
  82. register amount;
  83. {
  84. register char *color = (amount < 0) ? "black" : "green";
  85. register char *time;
  86.  
  87.     if(Hallucination) color=hcolor();
  88.     if(!uwep || uwep->olet != WEAPON_SYM) {
  89.         strange_feeling(otmp,
  90.             (amount > 0) ? "Your hands twitch."
  91.                      : "Your hands itch.");
  92.         return(0);
  93.     }
  94.  
  95.     if(uwep->otyp == WORM_TOOTH && amount > 0) {
  96.         uwep->otyp = CRYSKNIFE;
  97.         pline("Your weapon seems sharper now.");
  98.         uwep->cursed = 0;
  99.         return(1);
  100.     }
  101.  
  102.     if(uwep->otyp == CRYSKNIFE && amount < 0) {
  103.         uwep->otyp = WORM_TOOTH;
  104.         pline("Your weapon looks duller now.");
  105.         return(1);
  106.     }
  107.  
  108.     /* there is a (soft) upper limit to uwep->spe */
  109.     if(amount > 0 && uwep->spe > 5 && rn2(3)) {
  110.         pline("Your %s violently %s for a while and then evaporate%s.",
  111.         aobjnam(uwep,"glow"),Hallucination ? hcolor() : "green",
  112.         plur(uwep->quan));
  113.  
  114.         while(uwep)        /* let all of them disappear */
  115.                 /* note: uwep->quan = 1 is nogood if unpaid */
  116.         useup(uwep);
  117.         return(1);
  118.     }
  119.     if(!rn2(6)) amount *= 2;
  120.     time = (amount*amount == 1) ? "moment" : "while";
  121.     pline("Your %s %s for a %s.",
  122.         aobjnam(uwep, "glow"), color, time);
  123.     uwep->spe += amount;
  124.     if(amount > 0) uwep->cursed = 0;
  125.     return(1);
  126. }
  127.  
  128. int
  129. welded(obj) register struct obj *obj;  {
  130.     return(obj && obj == uwep && obj->cursed &&
  131.            (obj->olet == WEAPON_SYM || obj->otyp == HEAVY_IRON_BALL ||
  132.         obj->otyp == CAN_OPENER || obj->otyp == PICK_AXE));
  133. }
  134.